widget: Add widget-level handling of touch sequence state.
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 26 Feb 2014 12:07:08 +0000 (13:07 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 23 May 2014 17:54:22 +0000 (19:54 +0200)
These functions ATM do nothing but proxying the controller(s) state
with the given sequence.

gtk/gtkwidget.c
gtk/gtkwidget.h

index 4fd4d912f40d3a32bdf0bc7b55281860a7433ec9..b10f4ac619c14d9087843f8028289e32dff9bbcd 100644 (file)
@@ -16449,3 +16449,65 @@ gtk_widget_list_controllers (GtkWidget           *widget,
 
   return retval;
 }
+
+GtkEventSequenceState
+gtk_widget_get_sequence_state (GtkWidget        *widget,
+                               GdkEventSequence *sequence)
+{
+  GtkEventSequenceState state;
+  EventControllerData *data;
+  GtkWidgetPrivate *priv;
+  GList *l;
+
+  g_return_val_if_fail (GTK_IS_WIDGET (widget),
+                        GTK_EVENT_SEQUENCE_NONE);
+
+  priv = widget->priv;
+
+  for (l = priv->event_controllers; l; l = l->next)
+    {
+      data = l->data;
+
+      if (!GTK_IS_GESTURE (data->controller))
+        continue;
+
+      state = gtk_gesture_get_sequence_state (GTK_GESTURE (data->controller),
+                                              sequence);
+      if (state != GTK_EVENT_SEQUENCE_NONE)
+        return state;
+    }
+
+  return GTK_EVENT_SEQUENCE_NONE;
+}
+
+void
+gtk_widget_set_sequence_state (GtkWidget             *widget,
+                               GdkEventSequence      *sequence,
+                               GtkEventSequenceState  state)
+{
+  EventControllerData *data;
+  gboolean handled = FALSE;
+  GtkWidgetPrivate *priv;
+  GList *l;
+
+  g_return_val_if_fail (GTK_IS_WIDGET (widget),
+                        GTK_EVENT_SEQUENCE_NONE);
+
+  priv = widget->priv;
+
+  for (l = priv->event_controllers; l; l = l->next)
+    {
+      data = l->data;
+
+      if (!GTK_IS_GESTURE (data->controller))
+        continue;
+
+      handled |= gtk_gesture_set_sequence_state (GTK_GESTURE (data->controller),
+                                                 sequence, state);
+    }
+
+  if (!handled)
+    return;
+
+  /* FIXME: Propagate upwards/downwards */
+}
index 29d0ab356f39c7b26d40574e753f092b5d91f1cd..f3b2cf0d23bd3baae82a762ab4155dd1b0b17fa3 100644 (file)
@@ -1481,6 +1481,14 @@ GDK_AVAILABLE_IN_3_14
 GList * gtk_widget_list_controllers                     (GtkWidget           *widget,
                                                          GtkPropagationPhase  phase);
 
+GDK_AVAILABLE_IN_3_14
+GtkEventSequenceState gtk_widget_get_sequence_state     (GtkWidget             *widget,
+                                                         GdkEventSequence      *sequence);
+GDK_AVAILABLE_IN_3_14
+void                  gtk_widget_set_sequence_state     (GtkWidget             *widget,
+                                                         GdkEventSequence      *sequence,
+                                                         GtkEventSequenceState  state);
+
 G_END_DECLS
 
 #endif /* __GTK_WIDGET_H__ */